home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy001 / graph / graph20.arj / DEMOS / STARS / STARS.ASM next >
Encoding:
Assembly Source File  |  1996-02-24  |  5.7 KB  |  172 lines

  1. ;;;;;  CAMPO DE ESTRELLAS por Navi Dj.
  2. ;
  3. ;;;
  4. ;
  5. ;;;;;  Ejemplo de utilización de GRAPH.
  6.  
  7. .MODEL SMALL
  8. .STACK
  9. .386
  10. LOCALS
  11.  
  12. MaxEstrellas    EQU     2000
  13.  
  14. Estrella        STRUC
  15.         X       DW      ?
  16.         Y       DW      ?
  17.         Z       DW      ?
  18.         IncZ    DB      ?
  19.         Color   DB      ?
  20.                 ENDS
  21.  
  22. .DATA
  23. PaletaStar      DB      'STARS.COL',0
  24. HLVirtual       DB      ?
  25. Star         Estrella   MaxEstrellas DUP (?)
  26. Posicion        DB      ?
  27. cual            db      ?
  28.  
  29. .CODE
  30. INCLUDE GRFLIB.INC              ;  Se debe incluir este fichero siempre.
  31.  
  32. Alea1           DW      021F2h
  33. Alea2           DW      0FABAh
  34. Alea3           DW      0CABAh
  35. Alea4           DW      0120Fh
  36.  
  37. Aleatorio       PROC                    ;  Devuelve en DX un número pseudo-
  38.                 PUSH    BX              ; aleatorio.
  39.                 PUSH    BP
  40.                 PUSH    AX
  41.                 MOV     AX, CS:[Alea1]
  42.                 MOV     BX, CS:[Alea2]
  43.                 MOV     DX, CS:[Alea3]
  44.                 MOV     BP, CS:[Alea4]
  45.                 ADD     AX, 8ABAh
  46.                 ADD     BX, 13D7h
  47.                 ADD     DX, 147Ah
  48.                 ADD     BP, 321Bh
  49.                 ROR     AX, 2
  50.                 MOV     CS:[Alea4], AX
  51.                 ADD     BX, AX
  52.                 ROR     BX, 5
  53.                 MOV     CS:[Alea3], BX
  54.                 DEC     DX
  55.                 ADD     DX, BX
  56.                 XOR     AX, DX
  57.                 MOV     CS:[Alea2], DX
  58.                 SUB     BP, DX
  59.                 XOR     BP, AX
  60.                 MOV     CS:[Alea1], BP
  61.                 ADD     AX, BP
  62.                 MOV     DX, AX
  63.                 POP     AX
  64.                 POP     BP 
  65.                 POP     BX
  66.                 RET
  67. Aleatorio       ENDP
  68.  
  69. InicStars       PROC
  70.                 PUSH    DI
  71.                 XOR     DI, DI
  72.         @@Siguiente:
  73.                 CALL    Aleatorio
  74.                 MOV     [Star.X+DI], DX
  75.                 CALL    Aleatorio
  76.                 MOV     [Star.Y+DI], DX
  77.                 CALL    Aleatorio
  78.                 OR      DX, 1
  79.                 MOV     [Star.Z+DI], DX
  80.                 CALL    Aleatorio
  81.                 and dh,11000000b
  82.                 MOV     [Star.Color+DI], DH
  83.                 OR      DL, 00001111b
  84.                 MOV     [Star.IncZ+DI], DL
  85.                 ADD     DI, 8
  86.                 CMP     DI, (MaxEstrellas - 1) * 8
  87.                 JB    @@Siguiente
  88.                 POP     DI
  89.                 RET
  90. InicStars       ENDP
  91.  
  92. DibujaCampo     PROC
  93.                 PUSH    eSI
  94.                 PUSH    DI
  95.                 XOR     DI, DI
  96.                 xor esi,esi
  97.                 xor eax,eax
  98.         @@Siguiente:
  99.                 MOV     SI, [Star.Z+DI]
  100.                 OR      SI, SI
  101.                 JZ    @@PtoNoValido
  102.                 MOV     AX, [Star.X+DI]
  103.                 xor edx,edx
  104.                 SHL     eAX, 8
  105.                 DIV     eSI
  106.                 MOV     BX, AX
  107.                 MOV     AX, [Star.Y+DI]
  108.                 xor edx,edx
  109.                 SHL     eAX, 8
  110.                 DIV     eSI
  111.                 MOV     DX, AX
  112.                 MOV     CL, [Star.Color+DI]
  113.                 mov ax,[star.z+di]
  114.                 shr ah,2
  115.                 add cl,ah
  116.                 MOV     AL, [HLVirtual]
  117.                 CALL    PonPixel        ;  Llamamos a una rutina pasandole los
  118.         @@PtoNoValido:                  ; valores en los registros: 
  119.                 movzx ax, [star.incz+di];  AL = Handle de Pantalla virtual
  120.                 sub [star.z+di], ax     ;  CL = color
  121.                 ADD     DI, 8           ;  BX,DX = Posicion
  122.                 CMP     DI, (MaxEstrellas - 1) * 8
  123.                 JB    @@Siguiente
  124.                 POP     DI
  125.                 POP     eSI
  126.                 RET
  127. DibujaCampo     ENDP
  128.  
  129. MAIN            PROC
  130.                 MOV     AX, @DATA
  131.                 MOV     DS, AX
  132.                 CALL    LiberaMEM       ;  Se debe liberar la memoria antes de comenzar.
  133.                 CALL    ModoGrafico     ;  Se llama al modo gráfico.
  134.                 MOV     DX, Offset PaletaStar
  135.                 CALL    CargaPaleta     ;  Esta función carga la paleta.
  136.                 CALL    TrataError      ;  Y esta comprueba que no haya ningún
  137.                 PUSH    AX              ; error.
  138.                 MOV     AH, AL
  139.                 XOR     AL, AL
  140.                 XOR     BL, BL
  141.                 CALL    PonPaleta       ;  Coloca la paleta en la VGA
  142.                 CALL    TrataError
  143.                 POP     AX
  144.                 CALL    DestPaleta      ;  Libera el espacio en memoria de la
  145.                 CALL    TrataError      ; paleta
  146.                 CALL    CreaVirtual     ;  Crea una pantalla virtual.
  147.                 CALL    TrataError
  148.                 MOV     [HLVirtual], AL
  149.                 CALL    InicStars
  150.  
  151.         @@BuclePrincipal:
  152.                 XOR     CL, CL
  153.                 MOV     AL, [HLVirtual]
  154.                 CALL    BorraPantalla   ;  Deja la pantalla virtual en el color
  155.                 CALL    DibujaCampo     ; de CL.
  156.                 XOR     AH, AH
  157.                 MOV     AL, [HLVirtual]
  158.                 WaitVR                  ;  Espera un retrazo vertical.
  159.                 CALL    CopiaPantalla   ;  Copia de una PV a otra (en este caso a la VGA)
  160.  
  161.                 IN      AL, 60h
  162.                 CMP     AL, 129
  163.                 JNZ   @@BuclePrincipal
  164.  
  165.                 MOV     AL, [HLVirtual]
  166.                 CALL    DestVirtual     ;  Libera el espacio reservado por la PV
  167.                 CALL    ModoTexto       ;  Regresa al modo texto.
  168.                 MOV     AX, 4C00h
  169.                 INT     21h
  170. MAIN            ENDP
  171.                 END     MAIN
  172.